<?php
// application/controllers/ErrorController.php

/**
 * ErrorController
 */
class ErrorController extends Zend_Controller_Action
{	
	
	public function init()
    {
    	$this->getResponse()->insert('title', 'Serverfehler');
    }
    
    /**
     * errorAction() is the action that will be called by the "ErrorHandler"
     * plugin.  When an error/exception has been encountered
     * in a ZF MVC application (assuming the ErrorHandler has not been disabled
     * in your bootstrap) - the Errorhandler will set the next dispatchable
     * action to come here.  This is the "default" module, "error" controller,
     * specifically, the "error" action.  These options are configurable.
     *
     * @see http://framework.zend.com/manual/en/zend.controller.plugins.html
     *
     * @return void
     */
    public function errorAction()
    {
        // Ensure the default view suffix is used so we always return good
        // content
        $this->_helper->viewRenderer->setViewSuffix('phtml');

        // Grab the error object from the request
        $errors = $this->_getParam('error_handler');

        $registry = Zend_Registry::getInstance();
        
        // $errors will be an object set as a parameter of the request object,
        // type is a property
        switch ($errors->type) {
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:
                // 404 error -- controller or action not found
                $this->getResponse()->setHttpResponseCode(404);
                $this->view->message = 'Seite nicht gefunden';
                $this->view->text = 'Die von Ihnen gewünschte Seite ist nicht verfügbar. Möglicherweise wurde das Angebot zwischenzeitlich gelöscht. Über die linke Navigation können Sie die aktuellen Angebote einsehen.';
                $this->view->error = 404;
                break;
            default:
                // application error
                $this->getResponse()->setHttpResponseCode(500);
                $this->view->message = 'Interner Serverfehler';
                $this->view->text = 'Auf Serverseite ist im Programmablauf ein unerwarteter Fehler eingetreten. Die Fehlermeldung wurde an uns übermittelt. Bitte wiederholen Sie den Vorgang zu einem späteren Zeitpunkt.';
                $this->view->error = 500;

		        // Send E-Mail in live page
		        if ('production' == $this->getInvokeArg('env')):
		        	$msgAutor = '';
		        	$msgAutor .= 'Message: ' . "\n";
		        	$msgAutor .= $errors->exception->getMessage() . "\n";
		        	$msgAutor .= 'Stack trace: ' . "\n";
		        	$msgAutor .= $errors->exception->getTraceAsString() . "\n";
		        	$msgAutor .= 'Request Parameters: ' . "\n";
		        	$msgAutor .= $errors->request->getRequestUri() . "\n";
		        	$msgAutor .= 'IP: ' . "\n";
		        	$msgAutor .= $_SERVER["REMOTE_ADDR"] . "\n";
		
		    		$mail = new Zend_Mail('utf-8');
					$mail->setBodyText($msgAutor);
					$mail->setFrom('noreply@ticket-system.de', 'Beschriftungstool');
					$mail->addTo('constantin.hoeft@gmail.com', 'Administrator');
					$mail->setSubject('Beschriftungstool: Es ist ein Serverfehler aufgetreten');
		
		    		if($registry->configuration->mailer == 'smtp')
					{
						$config = array('auth' => 'login',
			                'username' => $registry->configuration->smtp->username,
			                'password' => $registry->configuration->smtp->password);
			
						$transport = new Zend_Mail_Transport_Smtp($registry->configuration->smtp->host, $config);
						$mail->send($transport);
					}
					else
					{
						$mail->send();
					}
		        endif;
                
                break;
        }

        // pass the environment to the view script so we can conditionally
        // display more/less information
        $this->view->env = $this->getInvokeArg('env');

        // pass the actual exception object to the view
        $this->view->exception = $errors->exception;

        // pass the request to the view
        $this->view->request = $errors->request;
    }
}
